#!/usr/bin/env python
"""
@author:余振新
@file: run.py
@time: 2023/04/04
"""
import os
import shutil

import pytest

from common import path
from common.log import INFO


def run():
    report_path = path.ensure_path_sep("/test_report/")
    if os.path.exists(report_path):
        shutil.rmtree(report_path)
        INFO.logger.info("初始化目录成功！")
    else:
        os.makedirs(report_path)
        INFO.logger.info("新增报告目录成功！")

    INFO.logger.info(r"""
                        _    _
                       (o)--(o)
                      /.______.\
                      \________/
                     ./        \.   开始执行呱~
                    ( .        , )
                     \ \_\\//_/ /
                      ~~  ~~  ~~
                        """)

    pytest.main(['-s', '-v', '-W', 'ignore:Module already imported:pytest.PytestWarning',
                 '--alluredir', './test_report/tmp'])
    """
           --count=？: 重复执行次数 
           -v: 显示错误位置以及错误的详细信息 -v -v 获取更详细的信息
           -s: 等价于 pytest --capture=no 可以捕获print函数的输出，如果不带-s参数则看不到ping打印内容
           -w: 忽略警告 会覆盖 pytest 配置文件中的默认警告设置   'ignore:Module already imported:pytest.PytestWarning' 在控制台不显示Module already imported警告
           -q: 简化输出信息
           -k: 只运行与表达式匹配的测试用例
           -m: 运行指定标签的测试用例 例如 pytest -m smoke 将仅执行带有 @pytest.mark.smoke 标记的测试。
           -x: 一旦错误，则停止运行
           --maxfail=？: 设置最大失败次数，当超出这个阈值时，则不会在执行测试用例
           --reruns=？：失败后重试次数，用于不稳定的网络场景或用例
           --reruns-delay=？： 失败后重试间隔（秒）
           --disable-warnings： 警用警告
    """
    INFO.logger.info(r"""
                        _    _
                       (o)--(o)
                      /.______.\
                      \________/
                     ./        \.   执行完咯呱~
                    ( .        , )
                     \ \_\\//_/ /
                      ~~  ~~  ~~
                        """)
    # 生成allure 报告
    os.system(r"allure generate ./test_report/tmp -o ./test_report/html --clean")
    # 启动本地服务 打开报告
    os.system(f"allure serve ./test_report/tmp -h 192.168.40.47 -p 9999")


if __name__ == '__main__':
    run()
